<?php
/**
 * CLAROLINE
 *
 * Functions file of the Portfolio tool for Claroline
 *
 * @author Pierre Raynaud <pierre.raynaud@u-clermont1.fr>
 *
 * @package PORTFOL
 *
 */

$tbl_list = array('PFLelement_grille','PFLdroits_edition','PFLfiche','PFLfiche_class','PFLfiche_user','PFLgrille','PFLoption','PFLoption_element','PFLsaisie','PFLoption_saisie','PFLgrilleClasse');
$tables = claro_sql_get_tbl($tbl_list);

$nom_ligne_defaut = "Nouvelle ligne";
$nom_colonne_defaut = "Nouvelle colonne";


/**
 * This function creates a new template
 *
 * @param string $course_code,$title,$auteur
 * @return int
 */ 
function creerModele ($course_code,$title,$auteur)
{
	global $tables;
	$sql_create = "INSERT INTO `".$tables['PFLfiche']."` 
			SET createur = ".$auteur.",
				 date_creation = NOW(),
				 course_code = '".$course_code."',
				 nom = '".$title."'";
	return claro_sql_query_insert_id($sql_create);
}

/**
 * This function searches template list
 *
 * @param string $course_code
 * @return array
 */ 

function chercherListeModele ($course_code)
{

}

/**
 * This function returns the grid list of a given template
 *
 * @param string $course_code
 * @return array
 */ 
function chercherListeGrilles ($template_id)
{
	global $tables;
	$sql_search = "SELECT * 
						FROM `".$tables['PFLGRILLE']."`
						WHERE FICHE_ID = '".$template_id."'
						ORDER BY ORDRE";
	return claro_sql_query_fetch_all_rows($sql_search);
}


function supprimerGrille()
{
	global $grille;
	$grille->load($_POST['grille']);
	$grille->majOrdre();
	return $grille->delete();
}


function chercherElements()
{
	global $element;
	$element->setGrilleId($_POST['grille']);
	$liste = $element->chercherListeElements();
	
	foreach ($element_liste as $liste)
	{
		$elements[$liste['type']][] = $liste['element_id'];
	}
	return $elements;
}
 
function ajouterElement()
{
	global $element;
	global $nom_ligne_defaut;
	global $nom_colonne_defaut;

	
	if ($_POST['grille'] && $_POST['type'])
	{
		if ($_POST['type'] == 1)
		$nom = $nom_colonne_defaut;
		else
		$nom = $nom_ligne_defaut;
	
		$grille_id = substr($_POST['grille'],7);
	
		$element->setGrilleId($grille_id);
		$element->setNom($nom);
		$element->setType($_POST['type']);
		
		$nouvel_ordre = $element->chercheNouvelOrdre();
		
		$element->setOrdre($nouvel_ordre);

		return $element->save();
	}
	
	return false;
}


function supprimerElement()
{
	global $element;
	global $saisie;

	if ($_POST['element'])
	{
		$elem_id = substr($_POST['element'],5);
	
		$element->load($elem_id);
		
		// On recherche si une valeur a été saisie
		$saisie->setColonneId ($element->getElementId());
		$saisie->setLigneId($element->getElementId());				
				
		// Pas de saisie dans cet élément, on supprime
		if ($_POST['force'] || !$saisie->chercherSaisieElement())
		{
			$element->majOrdre();
			
			if ($element->delete())
			return "OK";
		}		
		else
		return get_lang('Data already submited in this field, delete anyway ?');
	}
}


function deplacerGrille()
{
	global $grille;
	
	if ($_POST['grille'] && $_POST['nouvelle_position'])
	{
		$grille_id = substr($_POST['grille'],7);	
		
		$grille->load($grille_id);
		$ordre_initial = $grille->getOrdre();
		$nouvel_ordre = $ordre_initial+$_POST['nouvelle_position'];
		
		$element_a_echanger = $grille->chercherGrilleParOrdre($nouvel_ordre);
		
		if ($element_a_echanger)
		{
			$grille->setOrdre($nouvel_ordre);
			$grille->save();
			
			$grille->load($element_a_echanger);
			$grille->setOrdre($ordre_initial);
			$grille->save();
			
			// On retourne le deuxième element
			return $element_a_echanger;
		}
	}
}


function deplacerElement()
{
	global $element;

	if ($_POST['elem_id'] && $_POST['nouvelle_position'])
	{
		$elem_id = substr($_POST['elem_id'],5);	

		$element->load($elem_id);
		
		$ordre_initial = $element->getOrdre($elem_id);
		$nouvel_ordre = $ordre_initial+$_POST['nouvelle_position'];
			
		// Element à échanger
		$element_a_echanger = $element->chercherElementParOrdre($nouvel_ordre);

		if ($element_a_echanger)
		{
			$element->setOrdre($nouvel_ordre);
			$element->save();
			
			$element->load($element_a_echanger);
			$element->setOrdre($ordre_initial);
			$element->save();
			
			// On retourne le deuxième element
			return $element_a_echanger;
		}
		
		return false;
	}
}


function infosElement()
{
	global $element;

	$elem_id = substr($_POST['elem_id'],5);
	$element->load($elem_id);
	
	$infos["nom"] 					= $element->getNom();
	$infos["type"] 				= $element->getType();
	$infos["ordre"] 				= $element->getOrdre();
	$infos["type_reponse"] 		= $element->getTypeReponse();
	$infos["validation_auto"] 	= $element->getValidationAuto();
	

	// Droits de saisie sur cet élément
	if ($element->chercherDroitsEdition())
	$infos["droits_edition"]	= true;
	
	
	return $infos;
}

function validerElement()
{
	global $element;

	if ($_POST['elem_id'] && $_POST['nom'])
	{
		$elem_id = substr($_POST['elem_id'],5);
		$element->load($elem_id);
		$element->setNom($_POST['nom']);
		$element->setTypeReponse($_POST['type_reponse']);
		$element->setValidationAuto($_POST['validation_auto']);
		$feedbackSave = $element->save();
	}
	
	$element->viderListeEvaluateurs();
	
	if	($_POST['listeEvaluateurs'])
	{		
		$liste_evaluateurs = explode(',',$_POST['listeEvaluateurs']);	
	
		foreach ($liste_evaluateurs as $evaluateur)
		{
			$element->ajouterEvaluateur($evaluateur);
		}
	}
	
	
	return $feedbackSave;
}


function modifierFiche()
{
	global $fiche;
	if ($_POST['fiche'])
	$fiche_id = substr($_POST['fiche'],6);
	
	if ($_POST['titre'])
	{
		$fiche->load($fiche_id);
		$fiche->setNom($_POST['titre']);
		
		if ($fiche->save())
		return true;
	}
	
	return false;
}



function modifierTitre()
{
	global $grille;

	if ($_POST['grille'])
	$grille_id = substr($_POST['grille'],7);
	
	if ($_POST['titre'])
	{
		$grille->load($grille_id);
		$grille->setTitre($_POST['titre']);
		
		if ($grille->save())
		return true;
		else
		return false;
	}
	
	return false;
}

function modifierDescription()
{
	global $grille;

	if ($_POST['grille'])
	$grille_id = substr($_POST['grille'],7);

	if ($_POST['description'])
	{
		$grille->load($grille_id);
		$grille->setDescription($_POST['description']);
		
		if ($grille->save())
		return true;
		else
		return false;
	}
	
	return false;
}

function modifierRessource()
{
	global $grille;

	if ($_POST['grille'])
	$grille_id = substr($_POST['grille'],7);
	

	if ($_POST['url'] && $_POST['intitule'])
	{
		$grille->load($grille_id);		
		$grille->setRessource($_POST['intitule']);
		$grille->setRessourceUrl($_POST['url']);	

		
		if ($grille->save())
		return true;
		else
		return false;
	}
	
	return false;
}


function accesFiche($fiche_id,$user_id)
{
	global $tables;
	
	$sql = "SELECT fiche_id FROM `".$tables['PFLfiche_user']."` WHERE fiche_id = $fiche_id AND user_id = $user_id";
	return claro_sql_query_affected_rows($sql);
}

function chercheTypeReponse($col_id,$ligne_id)
{
	global $element;
	
	// Colonne
	$element->load($col_id);
	
	if ($element->getTypeReponse())
	return $element->getTypeReponse();
	
	// Ligne
	else
	{
		$element->load($ligne_id);
	
		if ($element->getTypeReponse())
		return $element->getTypeReponse();
	}
	
	return '---';
}


function chercherDeterminateur()
{
	global $element;

	$elem_id = substr($_POST['elem_id'],5);	
	$element->load($elem_id);
	
	return $element->chercherDeterminateur();
}


function saisiePossible($userId,$colonneId,$ligneId,$proprietaire)
{	
	global $tables;
	$sql = "SELECT user_id 
			  FROM `".$tables['PFLdroits_edition']."` 
			  WHERE (element_id = $colonneId OR element_id = $ligneId)";
	$data = claro_sql_query_fetch_all_rows($sql);
	
	unset($droits_edition);
	
	foreach ($data as $droit)
	{
		$uid = $droit['user_id'];
		$droits_edition[$uid] = 1;
	}

	// Pas de saisie possible s'il s'agit d'un étudiant d'une classe qui n'est pas autorisée pour cette grille
	if ($userId == $proprietaire)
	{
		$elementTemp = new ElementGrille;
		$elementTemp->load($colonneId);
		
		$grilleTemp = new Grille;
		$grilleTemp->load($elementTemp->getGrilleId());
		
		$listeGrilleClasses=$grilleTemp->chercherGrilleClasses();
		if (count($listeGrilleClasses))
		{
			// Cherche les classes de l'utilisateur
			$tbl = claro_sql_get_main_tbl();
			$sql = "SELECT class_id
		            	FROM `".$tbl['rel_class_user']."`
				WHERE user_id = ".$userId;
			$data = claro_sql_query_fetch_all_rows($sql);
			if (count($data))
			{
				foreach ($data as $classeUser)
				{
					$listeClasseUser[$classeUser['class_id']] = true;
				}
			}


			foreach ($listeGrilleClasses as $classe)
			{
				if ($listeClasseUser[$classe['classe_id']])
				$granted=true;
			}

			if (!isset($granted))
			return false;
		}
	}

		
	if ((!$droits_edition && $userId == $proprietaire) || ($droits_edition[$userId]))
	return true;
	else
	return false;
}

/*
function chercherRenseignements($colonneId,$ligneId,$userId)
{
	global $tables;
	$sql = "SELECT evaluateur_id,valeur,date 
			  FROM `".$tables['PFLsaisie']."` 
			  WHERE user_id = $userId
			  AND colonne_id = $colonneId
			  AND ligne_id = $ligneId
			  ORDER BY date DESC";
	return claro_sql_query_fetch_all_rows($sql);
}
*/

function chercherListeOptions($colonneId,$ligneId)
{
	global $tables;
	$sql = "SELECT nom, `".$tables['PFLoption']."`.option_id
			  FROM `".$tables['PFLoption']."`
			  LEFT JOIN `".$tables['PFLoption_element']."`
			  ON `".$tables['PFLoption']."`.option_id = `".$tables['PFLoption_element']."`.option_id
			  WHERE element_id = $colonneId
			  OR element_id = $ligneId
			  ORDER BY ordre,nom";
	return claro_sql_query_fetch_all_rows($sql);
}

// Cherche les évaluateurs possibles pour un élément
function chercherEvaluateurs()
{
	global $element;
	
	$elem_id = substr($_POST['elem_id'],5);	
	$element->load($elem_id);
	
	// Liste évaluateurs en cours
	$evaluateurs_en_cours = $element->chercherDroitsEdition();
	$liste_evaluateurs_en_cours = array();
	foreach ($evaluateurs_en_cours as $evaluateur_en_cours)
	{
		$liste_evaluateurs_en_cours[] = $evaluateur_en_cours['user_id'];
	}
	
	// Liste des admin du cours
	$tbl_mdb_names       = claro_sql_get_main_tbl();
   $tbl_user            = $tbl_mdb_names['user'];
   $tbl_rel_course_user = $tbl_mdb_names['rel_course_user'];
   
   $sql = "SELECT  u.user_id	  AS userId,
   					 u.nom        AS lastName,
                   u.prenom     AS firstName
           FROM    `" . $tbl_user            . "` AS u,
                   `" . $tbl_rel_course_user . "` AS cu
           WHERE   u.user_id = cu.user_id
           AND     cu.isCourseManager = 1
           AND		 cu.code_cours = '".claro_get_current_course_id()."'
           ORDER BY lastName,firstName";
    $liste = claro_sql_query_fetch_all_rows($sql);


	foreach ($liste as $evaluateur)
	{	
		$ligne = $evaluateur['userId']."|".$evaluateur['lastName']."|".$evaluateur['firstName'];
		
		if (in_array($evaluateur['userId'],$liste_evaluateurs_en_cours))
		$ligne .= "|selected";
			
		$liste_evaluateur[] = $ligne;
	}
	return $liste_evaluateur;
}

// Cherche les évaluateurs possibles pour un élément
function chercherClasses()
{
	$grille_id = substr($_POST['grille_id'],7);	

	$grilleTemp = new Grille;
	$grilleTemp->load($grille_id);
	
	$listeGrilleClasses=$grilleTemp->chercherGrilleClasses();
	$listeClassesEnCours = array();
	foreach ($listeGrilleClasses as $classeEnCours)
	{
		$listeClassesEnCours[] = $classeEnCours['classe_id'];
	}

	// Liste des classes inscrites
	require_once get_path('incRepositorySys').'/lib/class.lib.php';
		
	global $modele;
	$modele->load($grilleTemp->getFicheId());
	$classesInscrites = $modele->chercherClassesInscrites();

	foreach ($classesInscrites as $classe)
	{
		$classe_id = $classe['class_id'];
		$classe_info = class_get_properties ( $classe_id );
		
		if ($classe_id)
		{
			$inscrits[$classe_id] = $classe_info['name'];

			$ligne = $classe_id."|".$classe_info['name'];
			
			if (in_array($classe_id,$listeClassesEnCours))
			$ligne .= "|selected";
				
			$listeClasses[] = $ligne;
		}
	}

	return $listeClasses;
	
}


function enregistrerClasses()
{
	$grille_id = substr($_POST['grille_id'],7);	

	$grilleTemp = new Grille;
	$grilleTemp->load($grille_id);

	$grilleTemp->supprimerGrilleClasses();

	$liste_classes = explode(',',$_POST['listeClasses']);	
	
	foreach ($liste_classes as $classe)
	{
		if (!$grilleTemp->enregistrerGrilleClasses($classe))
		$erreur = true;
	}
	
	if (!$erreur)
	return "OK";
}



function montrerOptionsSaisie($colonneId,$ligneId,$proprietaire,$evaluateur)
{
	global $saisie;
	global $grille;

	$type_reponse = chercheTypeReponse($colonneId,$ligneId);
	
	$saisie = new Saisie();

	// Infos de la saisie
	$saisie->setColonneId($colonneId);
	$saisie->setLigneId($ligneId);
	$saisie->setUserId($proprietaire);
	
	$id_saisie = $saisie->chercheIdSaisie();

	if ($id_saisie)
	$saisie->load($id_saisie);
	else
	{
		$saisie->setValeur('');
	}
	
	
	// Différents type de réponses attendu
	switch ($type_reponse) 
	{
		case "texte":
			if ($grille->getApparence() == 'questions')
			$style = "case_saisie_ok";
			else
			$style = "saisie_ok";
			
    		$contenu = "<td class=\"".$style."\" onclick=\"afficherSaisieTexte(".$colonneId.",".$ligneId.",".$proprietaire.",".$evaluateur.")\" onMouseOver=\"this.style.backgroundColor='#FFFFA7'\" onMouseOut=\"this.style.backgroundColor='transparent'\"> ".$saisie->getValeur();
    		break;

		case "nombre":
    		$contenu = "<td class=\"saisie_ok\" onclick=\"afficherSaisieTexte(".$colonneId.",".$ligneId.",".$proprietaire.",".$evaluateur.")\"> ".$saisie->getValeur();
    		break;

		case "booleen":
    		if ($saisie->getValeur() == "true")
    		$contenu = '<td class="saisie_ok" onMouseOver="this.style.backgroundColor=\'#FFFFA7\'" onMouseOut="this.style.backgroundColor=\'transparent\'"><img src="img/selected.gif" alt="false" onclick="enregistrerSaisie(\''.$colonneId.'\',\''.$ligneId.'\',\''.$proprietaire.'\',\''.$evaluateur.'\')">';
    		else
    		$contenu = '<td class="saisie_ok" onMouseOver="this.style.backgroundColor=\'#FFFFA7\'" onMouseOut="this.style.backgroundColor=\'transparent\'"><img src="img/up.gif" alt="true" onclick="enregistrerSaisie(\''.$colonneId.'\',\''.$ligneId.'\',\''.$proprietaire.'\',\''.$evaluateur.'\')">';
    		break;

    	case "choix unique":
    		$liste_options = chercherListeOptions($colonneId,$ligneId);
    		$contenu = '<td class="saisie_ok" onMouseOver="this.style.backgroundColor=\'#FFFFA7\'" onMouseOut="this.style.backgroundColor=\'transparent\'"><select onChange="enregistrerSaisie(\''.$colonneId.'\',\''.$ligneId.'\',\''.$proprietaire.'\',\''.$evaluateur.'\',\'1\')"><option value=""> --- </option>';
    		foreach ($liste_options as $option)
    		{
    			if ($saisie->chercherOptionSaisie($option['option_id']))
			$checked = "selected";    
			else
			$checked = "";			
    			
    			$contenu .= '<option value="'.$option['option_id'].'" '.$checked.'>'.$option['nom'].'</option>';
    		}
		$contenu .= "</select>";
    		break;

    	case "choix multiples":
    		$liste_options = chercherListeOptions($colonneId,$ligneId);
    		$contenu = "<td class=\"saisie_ok\" onMouseOver=\"this.style.backgroundColor='#FFFFA7'\" onMouseOut=\"this.style.backgroundColor='transparent'\">";
    		foreach ($liste_options as $option)
    		{
			if ($saisie->chercherOptionSaisie($option['option_id']))
			{
				$img = 'selected.gif';
				$checked = 'checked';
			}			
			else
			{
				$img = 'up.gif';
				$checked = 'unchecked';
			}

			$contenu .= '<img src="img/'.$img.'" id="option_'.$option['option_id'].'" onclick="if(this.getAttribute(\'alt\') == \'checked\'){this.setAttribute(\'alt\',\'unchecked\');} else {this.setAttribute(\'alt\',\'checked\');};enregistrerSaisie(\''.$colonneId.'\',\''.$ligneId.'\',\''.$proprietaire.'\',\''.$evaluateur.'\',\''.$option['option_id'].'\')" alt="'.$checked.'">'.$option['nom'].'<br>';
    		}
    		break;
	}
	return $contenu;
}


function enregistrerSaisie()
{
	global $saisie;
	
	$saisie->setColonneId($_POST['colonne_id']);
	$saisie->setLigneId($_POST['ligne_id']);
	$saisie->setUserId($_POST['proprietaire']);
	$saisie->setEvaluateurId($_POST['evaluateur']);
	$saisie->setValeur($_POST['valeur']);
	
	$saisie_id = $saisie->save();
	
	if ($_POST['option'] && $saisie_id)
	{
		$saisie->enregistrerOption($_POST['option']);
	}
	
	return $saisie_id;
}

function enregistrerOptionSaisie()
{
	$saisie = new Saisie();

	if ($_POST['option'] && $_POST['saisieId'])
	{
		$saisie->load($_POST['saisieId']);
		$saisie->enregistrerOption($_POST['option']);
		return $saisie->getSaisieId();
	}
}

function chercherMembresCours($course_code)
{
	$tbl_mdb_names = claro_sql_get_main_tbl();

	$tbl_rel_course_user = $tbl_mdb_names['rel_course_user'  ];
	$tbl_users           = $tbl_mdb_names['user'             ];
	$tbl_courses_users   = $tbl_rel_course_user;

	$sqlGetUsers = "SELECT `user`.`user_id`      AS `user_id`,
                       `user`.`nom`          AS `nom`,
                       `user`.`prenom`       AS `prenom`
               FROM `" . $tbl_users . "`           AS user,
                    `" . $tbl_rel_course_user . "` AS course_user
               WHERE `user`.`user_id`=`course_user`.`user_id`
               AND   `course_user`.`code_cours`='" . $course_code . "'
               ORDER BY nom, prenom";
   return claro_sql_query_fetch_all_rows($sqlGetUsers);
}


function CLFDget_class_list_by_course($courseId)
{
    $tbl = claro_sql_get_main_tbl();

    $sql = "
        SELECT C.id              AS `id`,
               C.name            AS `name`,
               C.class_parent_id AS `class_parent_id`,
               CC.courseId       AS `course_id`
        FROM `" . $tbl['class'] . "` C
        LEFT JOIN `" . $tbl['rel_course_class'] . "` CC
               ON CC.`classId` = C.`id`
              WHERE CC.`courseId` = '" . addslashes($courseId) . "'
        ORDER BY C.`name`";
 
    return claro_sql_query_fetch_all_rows($sql);
}

function chercherUsersClasse($class_id)
{
	$tbl = claro_sql_get_main_tbl();
	$sql = "SELECT *
            	FROM `".$tbl['rel_class_user']."` `rel_c_u`, `".$tbl['user']."` `u`
            	WHERE `class_id`='". (int) $class_id ."'
            	AND `rel_c_u`.`user_id` = `u`.`user_id`";

	 return claro_sql_query_fetch_all_rows($sql);
}

function autoriserUtilisateur($user_id)
{
	global $modele_en_cours;
	
	foreach ($modele_en_cours->chercherListeInscrits() as $user)
	{
		if ($user['user_id'] == $user_id)
		return true;
	}
	
	// Classe du user
	$tbl = claro_sql_get_main_tbl();
	$sql = "SELECT class_id
            	FROM `".$tbl['rel_class_user']."`
		WHERE user_id = ".$user_id;
	$data = claro_sql_query_fetch_all_rows($sql);
	
	foreach ($modele_en_cours->chercherClassesInscrites() as $classe_inscrite)
	{
		foreach ($data as $classe)
		{
				if ($classe_inscrite['class_id'] == $classe['class_id'])
				return true;
		}
	}
	
	return false;
}


function chercherChoix()
{
	global $tables; 
	
	$element = substr($_POST['elem_id'],5);	
	
	$sql = "SELECT nom, `".$tables['PFLoption']."`.option_id FROM `".$tables['PFLoption']."` ORDER BY NOM";
	$data = claro_sql_query_fetch_all_rows($sql);
	
	foreach ($data as $choix)
	{	
		// Selected ??
		if ($element)
		{
			$sql = "SELECT option_id
						FROM `".$tables['PFLoption_element']."`
						WHERE option_id = ".$choix['option_id']."
						AND element_id = $element
					";
			$selected = claro_sql_query_affected_rows($sql);
		}
		
		$ligne = $choix['option_id'];
		
		if ($choix['nom'])
		$ligne .= "|".$choix['nom'];
		
		if ($selected)
		$ligne .= "|selected";
			
		$listeChoix[] = $ligne;
	}
	return $listeChoix;
}


function enregistrerOptions()
{
	global $tables; 
	
	$element = substr($_POST['elem_id'],5);
	
	// Vider les options
	$sql = "DELETE FROM `".$tables['PFLoption_element']."` WHERE element_id = ".$element;
	if( claro_sql_query($sql) == false ) return false;
	
	$liste_option = explode(",",$_POST['options']);
	
	foreach ($liste_option as $option)
	{
		$sql = "INSERT INTO `".$tables['PFLoption_element']."`
					SET element_id = ".$element.",
						   option_id = ".$option;
		if( claro_sql_query($sql) == false ) return false;
	}
	return true;
}


function creerOption()
{
	global $tables; 
	$sql = "INSERT INTO `".$tables['PFLoption']."` SET nom = '".$_POST['nom']."'";
	return claro_sql_query_insert_id($sql);
}

function generationFiche($modeleId,$heritage)
{
	require_once 'classes/modele.class.php';
	require_once 'classes/grille.class.php';
	require_once 'classes/elementGrille.class.php';
	require_once 'classes/saisie.class.php';

	$modele = new Modele();
	$modele->load($heritage);

	$grille = new Grille();
	$element = new ElementGrille();

	$grille->setFicheId($heritage);

	// Création des grilles
	foreach ($grille->chercherListeGrilles() as $nouvelleGrille)
	{
		$grille->load($nouvelleGrille['grille_id']);

		$newGrille = new Grille();
		$newGrille->setFicheId($modeleId);
		$newGrille->setTitre($grille->getTitre());
		$newGrille->setDescription($grille->getDescription());
		$newGrille->setRessource($grille->getRessource());
		$newGrille->setOrdre($grille->getOrdre());
		$newGrille->setApparence($grille->getApparence());
		$newGrille->setRessourceUrl($grille->getRessourceUrl());
		$newGrille->save();

		// Création des éléments de la grille
		$element->setGrilleId($grille->getGrilleId());

		// Relation ancien id / nouvel id
		unset($anciens);
		unset($nouveaux);

		foreach ($element->chercherListeElements() as $nouvelElement)
		{
			$element->load($nouvelElement['element_id']);
			
			$newElement = new ElementGrille();
			$newElement->setGrilleId($newGrille->getGrilleId());
			$newElement->setNom($element->getNom());
			$newElement->setType($element->getType());
			$newElement->setOrdre($element->getOrdre());
			$newElement->setType($element->getType());
			$newElement->setTypeReponse($element->getTypeReponse());
			$newElement->setValidationAuto($element->getValidationAuto());
			$newElement->setElementFicheMere($element->getElementId());
			$newElement->save();

			// Cherche les utilisateurs ayant le droit de saisir
			foreach ($element->chercherDroitsEdition() as $evaluateur)
			{
				$newElement->ajouterEvaluateur($evaluateur['user_id']);
			}

			$anciens[] = $element->getElementId();
			$nouveaux[] = $newElement->getElementId();
		}


		// On parse le tableau de relation ancien_id / nouvel_id
		if ($anciens)
		{	
			global $tables;
			foreach ($anciens as $ancien)
			{
				if($nouveaux[$ancien])
				{
					// Gestion des options 
					$sql = "SELECT option_id 
						FROM `".$tables['PFLoption_element']."`
						WHERE element_id = $ancien";
					$option_id = claro_sql_query_get_single_row($sql);

					$sql = "INSERT INTO `".$tables['PFLoption_element']."`
						SET option_id = $option_id,
						    element_id = $nouveaux[$ancien]";
					$sqlexe = claro_sql_query($sql);

					// Gestion des résultats
					// Colonne
					$saisie = new Saisie();
					$saisie->setColonneId($ancien);

					if ($saisie->chercherSaisieElement())
					{
						foreach ($saisie->chercherListeSaisieElement() as $ancienneSaisie)
						{
							$saisie->load($ancienneSaisie['saisie_id']);

							$newSaisie = new Saisie();
							$newSaisie->setUserId($saisie->getUserId());
							$newSaisie->setEvaluateurId($saisie->getEvaluateurId());
							$newSaisie->setColonneId($nouveaux[$ancien]);
							$newSaisie->setLigneId($nouveaux[$saisie->getLigneId()]);
							$newSaisie->setValeur($saisie->getValeur());
							$newSaisie->setDate($saisie->getDate());

							$newSaisie->save();
						}
					}
				}
			}
		}
	}
}

function chercherStats()
{
	
}


?>
